package main

import "fmt"

func main() {
	numsChan := make(chan int, 10)

	go func() {
		for i := 0; i < 50; i++ {
			numsChan <- i
			fmt.Println("write data: ", i)
		}
		fmt.Println("data write over, ready close!")
		close(numsChan)
		//close(numsChan) //重复关闭，崩溃
		//numsChan <- 10 //关闭之后写，崩溃
	}()

	//遍历管道时，只返回一个值
	//for range是不知道是否已经写完了，所以会一直在这里等待
	//在写入端将管道关闭，for range遍历关闭管道，会退出
	for v := range numsChan {
		fmt.Println("read data: ", v)
	}

	fmt.Println("test over!")
}
